// 手写一个简单版redux

export function createStore(reducer) {
  // 存储状态数据
  let currentState;
  // 存储subscribe的回调函数容器
  const listeners = [];

  // 获取状态数据方法
  function getState() {
    return currentState;
  }

  // 触发更新方法 -> 执行 reducer 函数，计算生成 newState -> 更新状态数据 -> 触发重新渲染
  function dispatch(action) {
    // reducer函数触发时，接受prevState和action
    currentState = reducer(currentState, action);
    // 触发subscribe绑定的回调
    listeners.forEach((listener) => listener());
  }

  // 绑定当state发生变化的事件
  function subscribe(listener) {
    listeners.push(listener);
  }

  // 为了给状态一个初始化值
  currentState = reducer(undefined, { type: "@@INIT_REDUX_Sxa213" });

  return {
    getState,
    dispatch,
    subscribe,
  };
}
